
class SS_Client_T
{
	public:
		SS_Client_T(Socket_Server_T& server, int socket_fd);

		virtual ~SS_Client_T();

		int Get_Socket_FD(void) const { return m_socket_fd; }

		bool_t Output_Is_Pending(void) const { return (m_outgoing_msg != NULL); }

		/** Performs message transmission logic for the client. */
      	void Transmit(void);

		struct timespec m_last_rcvd_msg_time;

		uint32_t m_msgs_recv;

		uint32_t m_msgs_sent;

		SS_Message_T const *m_outgoing_msg;

		std::queue<SS_Message_T const *> m_outgoing_queue;

		std::set<uint32_t> m_published_msg_codes;

		size_t m_recv_header_read;

		SS_Message_Header_T m_recv_header;

		size_t m_recv_payload_read;

		char *m_recv_payload;	

		size_t m_recv_total;

		SS_Message_Header_T m_send_header;

		size_t m_send_total;

		Socket_Server_T& m_server;

		int m_socket_fd;

		std::set<uint32_t> m_spied_from;

		std::set<uint32_t> m_spied_to;

		std::set<uint32_t> m_spy_from;

		std::set<uint32_t> m_spy_to;
		
		std::set<uint32_t> m_subscribed_msg_codes;

		size_t m_transmit_header_written;

		size_t m_transmit_payload_size;

		size_t m_transmit_payload_written;

		SS_UID_T m_uid;

		std::string m_client_description;
}





